import PyInstaller.__main__
import sys
import shutil
import os
import face_recognition
import face_recognition_models
import pkg_resources

# 获取face_recognition库的路径
face_recognition_path = os.path.dirname(face_recognition.__file__)
face_recognition_models_path = os.path.dirname(face_recognition_models.__file__)

PyInstaller.__main__.run([
    'face_recognition_script.py',
    '--onefile',
    '--add-data', f'{face_recognition_path}:face_recognition',
    '--add-data', f'{face_recognition_models_path}:face_recognition_models',
    '--hidden-import', 'face_recognition.face_recognition_cli',
    '--hidden-import', 'face_recognition.api',
    '--hidden-import', 'face_recognition.face_detection_cli',
    '--hidden-import', 'face_recognition.face_recognition_cli',
    '--hidden-import', 'face_recognition_models',
    '--hidden-import', 'dlib',
    '--hidden-import', 'multiprocessing',
    '--hidden-import', 'multiprocessing.pool',
    '--hidden-import', 'multiprocessing.managers',    
    '--hidden-import', 'json',
    '--hidden-import', 'argparse',
    '--hidden-import', 'PIL',  # Pillow库
    '--hidden-import', 'PIL.Image',
    '--hidden-import', 'numpy',
    '--hidden-import', 'logging',
    '--add-data', f'{pkg_resources.get_distribution("Pillow").location}:PIL',  # 添加Pillow库
    '--add-data', f'{pkg_resources.get_distribution("numpy").location}:numpy',  # 添加numpy库
    '--add-data', f'{pkg_resources.get_distribution("face_recognition").location}:face_recognition',
    '--add-data', f'{pkg_resources.get_distribution("face_recognition_models").location}:face_recognition_models',
    '--name', 'face_recognition_executable',
    '--console',  # 显示控制台窗口，因为脚本需要命令行参数
    '--log-level', 'ERROR',  # 只显示错误级别的日志
])

# 复制生成的可执行文件到当前目录
if sys.platform.startswith('win'):
    src = 'dist/face_recognition_executable.exe'
    dst = './face_recognition_executable.exe'
else:
    src = 'dist/face_recognition_executable'
    dst = './face_recognition_executable'

if os.path.exists(dst):
    os.remove(dst)
    print(f"已删除旧的 {dst}")

try:
    shutil.move(src, '.')
    print(f"已成功移动新的可执行文件到 {dst}")
except Exception as e:
    print(f"移动可执行文件时发生错误: {str(e)}")

# 清理临时文件
try:
    if os.path.exists('build'):
        shutil.rmtree('build')
    if os.path.exists('dist'):
        shutil.rmtree('dist')
    if os.path.exists('face_recognition_executable.spec'):
        os.remove('face_recognition_executable.spec')
    print("已清理临时文件")
except Exception as e:
    print(f"清理临时文件时发生错误: {str(e)}")


